This is how to load json files

library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages -------------------------------------------------------------------------------------------------------------------------------- tidyverse 1.3.1 --
v ggplot2 3.3.5     v purrr   0.3.4
v tibble  3.1.4     v dplyr   1.0.7
v tidyr   1.1.3     v stringr 1.4.0
v readr   2.0.1     v forcats 0.5.1
-- Conflicts ----------------------------------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
kills
wins <- kills %>%  filter(attackerTeam!=victimTeam) %>%  group_by(match_id,round_num) %>% summarise(map=last(map_name),T_team=last(if_else(attackerSide=="T","T","CT")))
`summarise()` has grouped output by 'match_id'. You can override using the `.groups` argument.
most_played <- kills %>%  group_by(match_id ) %>%  summarize( attackerSteamID=last(attackerSteamID),attackerName=last(attackerName) ) %>% group_by(attackerSteamID) %>% summarize(name=last(attackerName),match_count=n())
most_played[order(most_played$match_count, decreasing=TRUE), ] %>% top_n(30)
Selecting by match_count
wins <- kills %>%  filter(attackerTeam!=victimTeam) %>%  group_by(match_id,round_num) %>% summarise(map=last(map_name),winner=last(round_won_by),T_team=last(if_else(attackerSide=="T",attackerTeam,victimTeam)))
`summarise()` has grouped output by 'match_id'. You can override using the `.groups` argument.
wins


wins <- kills %>% group_by(match_id) %>% summarise(round_tot=last(round_tot)+1,team1=last(match_team1),team2=last(match_team2),winner=last(round_won_by),looser=if_else(last(round_won_by)!=last(match_team1),last(match_team1),last(team2)))

wins <- wins %>%  mutate(final_score_winner=if_else(round_tot<31,16, 19+3*(  (round_tot-31)%/%6))) %>%  mutate(final_score_looser=round_tot-final_score_winner) %>% mutate(score_diff=(final_score_winner-final_score_looser)/round_tot)
wins
               
kills
players <- kills %>% group_by(match_event,attackerSteamID)   %>%  summarise(name=last(attackerName),team=last(attackerTeam),date=last(match_date),event=last(match_event)  )
`summarise()` has grouped output by 'match_event'. You can override using the `.groups` argument.
players

Team stats

kills

#team stats on kills
team_kills <- kills %>% filter(attackerTeam!=victimTeam) %>%  group_by(match_id,attackerTeam) %>% summarise(kills_tot=n(),kpr=n()/last(round_tot),team=last(attackerTeam),hs_percent= sum(isHeadshot==TRUE)/n(),blinded_percent=sum(attackerBlinded==TRUE)/n(),blinded_percent=sum(victimBlinded==TRUE)/n(),first_kill_percent=sum(isFirstKill==TRUE)/last(round_tot),first_kill_percent=sum(isFirstKill==TRUE)/last(round_tot),non_traded_percent=sum(isTrade==FALSE)/n(),assist_percent= sum(!is.na(assisterTeam))/last(round_tot))
`summarise()` has grouped output by 'match_id'. You can override using the `.groups` argument.
team_kills

#team stats on  damages
team_damages <- damages %>% filter(attackerTeam!=victimTeam) %>%  group_by(match_id,attackerTeam) %>% summarise(adr=sum(hpDamageTaken)/last(round_tot),team=last(attackerTeam),strafing=sum(attackerStrafe==TRUE)/n())
`summarise()` has grouped output by 'match_id'. You can override using the `.groups` argument.
#team stat on flash 
flashes
team_flashes <- flashes %>% filter(attackerTeam!=playerTeam) %>%  group_by(match_id,attackerTeam) %>% summarise(avg_flash_duration=sum(flashDuration)/last(round_tot),team=last(attackerTeam))
`summarise()` has grouped output by 'match_id'. You can override using the `.groups` argument.
#team stats for grenades
team_grenades <- grenades  %>% rename(attackerTeam=throwerTeam) %>%   group_by(match_id,attackerTeam) %>% summarise(grenades_per_round=n()/last(round_tot),team=last(attackerTeam),smokes_per_round=sum("Smoke Grenade"==grenadeType)/last(round_tot),attack_grenades_round=sum("Smoke Grenade"!=grenadeType)/last(round_tot),event=last(match_event))
`summarise()` has grouped output by 'match_id'. You can override using the `.groups` argument.
#join everything
team_killsstat <- inner_join(team_kills,wins) %>% inner_join(team_damages) %>% inner_join(team_flashes) %>%  inner_join(team_grenades)  
Joining, by = "match_id"
Joining, by = c("match_id", "attackerTeam", "team")
Joining, by = c("match_id", "attackerTeam", "team")
Joining, by = c("match_id", "attackerTeam", "team")
#create y axis score difference data
team_killsstat <- team_killsstat %>% mutate(relative_score_diff=if_else(winner!=attackerTeam,-score_diff,score_diff))

PCA


pca.variables <- c('kills_tot', 'kpr', 'hs_percent', 'blinded_percent', 'first_kill_percent',
'non_traded_percent', 'assist_percent', 'strafing', 'adr',  'avg_flash_duration', 'grenades_per_round')

team_killsstat.pca <- prcomp(team_killsstat[,pca.variables], center = TRUE,scale. = TRUE)

summary(team_killsstat.pca)
Importance of components:
                          PC1    PC2     PC3     PC4     PC5     PC6    PC7    PC8     PC9   PC10    PC11
Standard deviation     2.0433 1.2503 1.00724 0.99353 0.91287 0.85210 0.7438 0.7236 0.56743 0.5307 0.14189
Proportion of Variance 0.3795 0.1421 0.09223 0.08974 0.07576 0.06601 0.0503 0.0476 0.02927 0.0256 0.00183
Cumulative Proportion  0.3795 0.5217 0.61390 0.70364 0.77939 0.84540 0.8957 0.9433 0.97257 0.9982 1.00000
library(devtools)
Warning: package ‘devtools’ was built under R version 4.1.2
Loading required package: usethis
Warning: package ‘usethis’ was built under R version 4.1.2
install_github("vqv/ggbiplot")
WARNING: Rtools is required to build R packages, but is not currently installed.

Please download and install Rtools 4.0 from https://cran.r-project.org/bin/windows/Rtools/.
Downloading GitHub repo vqv/ggbiplot@HEAD
These packages have more recent versions available.
It is recommended to update all of them.
Which would you like to update?

 1: All                                
 2: CRAN packages only                 
 3: None                               
 4: rlang     (0.4.11 -> 0.4.12) [CRAN]
 5: glue      (1.4.2  -> 1.5.1 ) [CRAN]
 6: crayon    (1.4.1  -> 1.4.2 ) [CRAN]
 7: pillar    (1.6.2  -> 1.6.4 ) [CRAN]
 8: lifecycle (1.0.0  -> 1.0.1 ) [CRAN]
 9: withr     (2.4.2  -> 2.4.3 ) [CRAN]
10: tibble    (3.1.4  -> 3.1.6 ) [CRAN]
11: digest    (0.6.27 -> 0.6.29) [CRAN]
WARNING: Rtools is required to build R packages, but is not currently installed.

Please download and install Rtools 4.0 from https://cran.r-project.org/bin/windows/Rtools/.
  
  
  
√  checking for file 'C:\Users\nguye\AppData\Local\Temp\Rtmp0Ef7Kg\remotes4274ef94be9\vqv-ggbiplot-7325e88/DESCRIPTION' (406ms)

  
  
  
-  preparing 'ggbiplot':
   checking DESCRIPTION meta-information ...
  
√  checking DESCRIPTION meta-information

  
  
  
-  checking for LF line-endings in source and make files and shell scripts
-  checking for empty or unneeded directories

  
-  looking to see if a 'data/datalist' file should be added
-  building 'ggbiplot_0.55.tar.gz'

  
   
Installing package into ‘C:/Users/nguye/OneDrive/Documents/R/win-library/4.1’
(as ‘lib’ is unspecified)
* installing *source* package 'ggbiplot' ...
** using staged installation
** R
** data
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
  converting help for package 'ggbiplot'
    finding HTML links ... done
    ggbiplot                                html  
    ggscreeplot                             html  
    wine                                    html  
** building package indices
** testing if installed package can be loaded from temporary location
*** arch - i386
*** arch - x64
** testing if installed package can be loaded from final location
*** arch - i386
*** arch - x64
** testing if installed package keeps a record of temporary installation path
* DONE (ggbiplot)

We now color points so that teams that have won appear in a certain color, and teams that didn’t appear in another color. We also make arrow stand out a bit more, and add the correlation circle.


p <- ggbiplot(team_killsstat.pca , obs.scale = 1, var.scale =1,circle=TRUE, groups=team_killsstat$win,varname.adjust = 1.7, varname.size = 2.3,  alpha = 0.7)
Warning: Unknown or uninitialised column: `win`.
p <- p + xlim(-4.5, 3) + 
  ylim(-3.1, 5) + 
  ggtitle("PCA of team statistics in matches")  +
  theme(plot.title = element_text(hjust = 0.5))+ 
  labs(colour = "Match result") 

p
Warning: Removed 97 rows containing missing values (geom_point).

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBkYXRhIGxpb24gZHJpdmUgbGluazogaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL2ZvbGRlcnMvMTB3bmRRU0oxNVB2ZDk3WHdaMzJKX0JTdTNGLWNseElRP3VzcD1zaGFyaW5nDQoNCg0KIyNVc2VmdWwgaW5mbyBmb3IgYWxsIHJvd3MNCg0KInJvdW5kX3dvbl9ieSI6IHRlYW0gdGhhdCB3b24gdGhlIHJvdW5kDQogIm1hdGNoX2lkIjogIjAgYXN0cmFsaXMtdnMtY3I0enktbTEtaW5mZXJubyIgdW5pcXVlIG1hdGNoIGlkZW50aWZpZXINCiJtYXBfbmFtZSI6IG5hbWUgb2YgbWFwIHBsYXllZA0KICJyb3VuZF9udW0iOiBudW1iZXIgb2YgdGhlIHJvdW5kIGZyb20gMSB0byB0aGUgbGFzdCByb3VuZA0KInJvdW5kX3RvdCI6IHRvdGFsIG51bWJlciBvZiByb3VuZHMgaW4gdGhlIG1hdGNoDQoibWF0Y2hfZXZlbnQiOiB1bmlxdWUgZXZlbnQgaWRlbnRpZmllciBleCAiU3RhckxhZGRlciBNYWpvciBCZXJsaW4gMjAxOSINCiJtYXRjaF9kYXRlIjogZGF0ZSBvZiBtYXRjaCBpbiBtaWxsaXNlY29uZHMNCiJtYXRjaF90ZWFtMSI6IG5hbWUgb2YgYSB0ZWFtDQoibWF0Y2hfdGVhbTIiOiBuYW1lIG9mIHRoZSBvdGhlciB0ZWFtDQoNCg0KIyMgVGhpcyBpcyBob3cgdG8gbG9hZCBqc29uIGZpbGVzDQoNCmBgYHtyfQ0KI1RoaXMgaXMgaG93IHRvIGxvYWQganNvbiBmaWxlcyANCmxpYnJhcnkoanNvbmxpdGUpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmdyZW5hZGVzIDwtIGpzb25saXRlOjpmcm9tSlNPTigiZGF0YS9BTExfZ3JlbmFkZXMuanNvbiIsIHNpbXBsaWZ5VmVjdG9yID0gVFJVRSkNCmtpbGxzIDwtIGpzb25saXRlOjpmcm9tSlNPTigiZGF0YS9BTExfa2lsbHMuanNvbiIsIHNpbXBsaWZ5VmVjdG9yID0gVFJVRSkNCmRhbWFnZXMgPC0ganNvbmxpdGU6OmZyb21KU09OKCJkYXRhL0FMTF9kYW1hZ2VzLmpzb24iLCBzaW1wbGlmeVZlY3RvciA9IFRSVUUpDQpmbGFzaGVzIDwtIGpzb25saXRlOjpmcm9tSlNPTigiZGF0YS9BTExfZmxhc2hlcy5qc29uIiwgc2ltcGxpZnlWZWN0b3IgPSBUUlVFKQ0KYGBgDQoNCmBgYHtyfQ0Ka2lsbHMNCndpbnMgPC0ga2lsbHMgJT4lICBmaWx0ZXIoYXR0YWNrZXJUZWFtIT12aWN0aW1UZWFtKSAlPiUgIGdyb3VwX2J5KG1hdGNoX2lkLHJvdW5kX251bSkgJT4lIHN1bW1hcmlzZShtYXA9bGFzdChtYXBfbmFtZSksVF90ZWFtPWxhc3QoaWZfZWxzZShhdHRhY2tlclNpZGU9PSJUIiwiVCIsIkNUIikpKQ0KDQptb3N0X3BsYXllZCA8LSBraWxscyAlPiUgIGdyb3VwX2J5KG1hdGNoX2lkICkgJT4lICBzdW1tYXJpemUoIGF0dGFja2VyU3RlYW1JRD1sYXN0KGF0dGFja2VyU3RlYW1JRCksYXR0YWNrZXJOYW1lPWxhc3QoYXR0YWNrZXJOYW1lKSApICU+JSBncm91cF9ieShhdHRhY2tlclN0ZWFtSUQpICU+JSBzdW1tYXJpemUobmFtZT1sYXN0KGF0dGFja2VyTmFtZSksbWF0Y2hfY291bnQ9bigpKQ0KbW9zdF9wbGF5ZWRbb3JkZXIobW9zdF9wbGF5ZWQkbWF0Y2hfY291bnQsIGRlY3JlYXNpbmc9VFJVRSksIF0gJT4lIHRvcF9uKDMwKQ0KDQp3aW5zIDwtIGtpbGxzICU+JSAgZmlsdGVyKGF0dGFja2VyVGVhbSE9dmljdGltVGVhbSkgJT4lICBncm91cF9ieShtYXRjaF9pZCxyb3VuZF9udW0pICU+JSBzdW1tYXJpc2UobWFwPWxhc3QobWFwX25hbWUpLHdpbm5lcj1sYXN0KHJvdW5kX3dvbl9ieSksVF90ZWFtPWxhc3QoaWZfZWxzZShhdHRhY2tlclNpZGU9PSJUIixhdHRhY2tlclRlYW0sdmljdGltVGVhbSkpKQ0KDQp3aW5zDQpgYGANCg0KDQpgYGB7cn0NCg0KDQp3aW5zIDwtIGtpbGxzICU+JSBncm91cF9ieShtYXRjaF9pZCkgJT4lIHN1bW1hcmlzZShyb3VuZF90b3Q9bGFzdChyb3VuZF90b3QpKzEsdGVhbTE9bGFzdChtYXRjaF90ZWFtMSksdGVhbTI9bGFzdChtYXRjaF90ZWFtMiksd2lubmVyPWxhc3Qocm91bmRfd29uX2J5KSxsb29zZXI9aWZfZWxzZShsYXN0KHJvdW5kX3dvbl9ieSkhPWxhc3QobWF0Y2hfdGVhbTEpLGxhc3QobWF0Y2hfdGVhbTEpLGxhc3QodGVhbTIpKSkNCg0Kd2lucyA8LSB3aW5zICU+JSAgbXV0YXRlKGZpbmFsX3Njb3JlX3dpbm5lcj1pZl9lbHNlKHJvdW5kX3RvdDwzMSwxNiwgMTkrMyooICAocm91bmRfdG90LTMxKSUvJTYpKSkgJT4lICBtdXRhdGUoZmluYWxfc2NvcmVfbG9vc2VyPXJvdW5kX3RvdC1maW5hbF9zY29yZV93aW5uZXIpICU+JSBtdXRhdGUoc2NvcmVfZGlmZj0oZmluYWxfc2NvcmVfd2lubmVyLWZpbmFsX3Njb3JlX2xvb3Nlcikvcm91bmRfdG90KQ0Kd2lucw0KICAgICAgICAgICAgICAgDQpraWxscw0KcGxheWVycyA8LSBraWxscyAlPiUgZ3JvdXBfYnkobWF0Y2hfZXZlbnQsYXR0YWNrZXJTdGVhbUlEKSAgICU+JSAgc3VtbWFyaXNlKG5hbWU9bGFzdChhdHRhY2tlck5hbWUpLHRlYW09bGFzdChhdHRhY2tlclRlYW0pLGRhdGU9bGFzdChtYXRjaF9kYXRlKSxldmVudD1sYXN0KG1hdGNoX2V2ZW50KSAgKQ0KcGxheWVycw0KYGBgDQoNCg0KDQpUZWFtIHN0YXRzDQoNCmtpbGxzDQoNCmBgYHtyfQ0KI3RlYW0gc3RhdHMgb24ga2lsbHMNCnRlYW1fa2lsbHMgPC0ga2lsbHMgJT4lIGZpbHRlcihhdHRhY2tlclRlYW0hPXZpY3RpbVRlYW0pICU+JSAgZ3JvdXBfYnkobWF0Y2hfaWQsYXR0YWNrZXJUZWFtKSAlPiUgc3VtbWFyaXNlKGtpbGxzX3RvdD1uKCksa3ByPW4oKS9sYXN0KHJvdW5kX3RvdCksdGVhbT1sYXN0KGF0dGFja2VyVGVhbSksaHNfcGVyY2VudD0gc3VtKGlzSGVhZHNob3Q9PVRSVUUpL24oKSxibGluZGVkX3BlcmNlbnQ9c3VtKGF0dGFja2VyQmxpbmRlZD09VFJVRSkvbigpLGJsaW5kZWRfcGVyY2VudD1zdW0odmljdGltQmxpbmRlZD09VFJVRSkvbigpLGZpcnN0X2tpbGxfcGVyY2VudD1zdW0oaXNGaXJzdEtpbGw9PVRSVUUpL2xhc3Qocm91bmRfdG90KSxmaXJzdF9raWxsX3BlcmNlbnQ9c3VtKGlzRmlyc3RLaWxsPT1UUlVFKS9sYXN0KHJvdW5kX3RvdCksbm9uX3RyYWRlZF9wZXJjZW50PXN1bShpc1RyYWRlPT1GQUxTRSkvbigpLGFzc2lzdF9wZXJjZW50PSBzdW0oIWlzLm5hKGFzc2lzdGVyVGVhbSkpL2xhc3Qocm91bmRfdG90KSkNCg0KdGVhbV9raWxscw0KDQojdGVhbSBzdGF0cyBvbiAgZGFtYWdlcw0KdGVhbV9kYW1hZ2VzIDwtIGRhbWFnZXMgJT4lIGZpbHRlcihhdHRhY2tlclRlYW0hPXZpY3RpbVRlYW0pICU+JSAgZ3JvdXBfYnkobWF0Y2hfaWQsYXR0YWNrZXJUZWFtKSAlPiUgc3VtbWFyaXNlKGFkcj1zdW0oaHBEYW1hZ2VUYWtlbikvbGFzdChyb3VuZF90b3QpLHRlYW09bGFzdChhdHRhY2tlclRlYW0pLHN0cmFmaW5nPXN1bShhdHRhY2tlclN0cmFmZT09VFJVRSkvbigpKQ0KDQojdGVhbSBzdGF0IG9uIGZsYXNoIA0KZmxhc2hlcw0KdGVhbV9mbGFzaGVzIDwtIGZsYXNoZXMgJT4lIGZpbHRlcihhdHRhY2tlclRlYW0hPXBsYXllclRlYW0pICU+JSAgZ3JvdXBfYnkobWF0Y2hfaWQsYXR0YWNrZXJUZWFtKSAlPiUgc3VtbWFyaXNlKGF2Z19mbGFzaF9kdXJhdGlvbj1zdW0oZmxhc2hEdXJhdGlvbikvbGFzdChyb3VuZF90b3QpLHRlYW09bGFzdChhdHRhY2tlclRlYW0pKQ0KDQojdGVhbSBzdGF0cyBmb3IgZ3JlbmFkZXMNCnRlYW1fZ3JlbmFkZXMgPC0gZ3JlbmFkZXMgICU+JSByZW5hbWUoYXR0YWNrZXJUZWFtPXRocm93ZXJUZWFtKSAlPiUgICBncm91cF9ieShtYXRjaF9pZCxhdHRhY2tlclRlYW0pICU+JSBzdW1tYXJpc2UoZ3JlbmFkZXNfcGVyX3JvdW5kPW4oKS9sYXN0KHJvdW5kX3RvdCksdGVhbT1sYXN0KGF0dGFja2VyVGVhbSksc21va2VzX3Blcl9yb3VuZD1zdW0oIlNtb2tlIEdyZW5hZGUiPT1ncmVuYWRlVHlwZSkvbGFzdChyb3VuZF90b3QpLGF0dGFja19ncmVuYWRlc19yb3VuZD1zdW0oIlNtb2tlIEdyZW5hZGUiIT1ncmVuYWRlVHlwZSkvbGFzdChyb3VuZF90b3QpLGV2ZW50PWxhc3QobWF0Y2hfZXZlbnQpKQ0KDQojam9pbiBldmVyeXRoaW5nDQp0ZWFtX2tpbGxzc3RhdCA8LSBpbm5lcl9qb2luKHRlYW1fa2lsbHMsd2lucykgJT4lIGlubmVyX2pvaW4odGVhbV9kYW1hZ2VzKSAlPiUgaW5uZXJfam9pbih0ZWFtX2ZsYXNoZXMpICU+JSAgaW5uZXJfam9pbih0ZWFtX2dyZW5hZGVzKSAgDQoNCg0KI2NyZWF0ZSB5IGF4aXMgc2NvcmUgZGlmZmVyZW5jZSBkYXRhDQp0ZWFtX2tpbGxzc3RhdCA8LSB0ZWFtX2tpbGxzc3RhdCAlPiUgbXV0YXRlKHJlbGF0aXZlX3Njb3JlX2RpZmY9aWZfZWxzZSh3aW5uZXIhPWF0dGFja2VyVGVhbSwtc2NvcmVfZGlmZixzY29yZV9kaWZmKSkNCg0KYGBgDQoNCg0KDQoNClBDQQ0KDQpgYGB7cn0NCg0KcGNhLnZhcmlhYmxlcyA8LSBjKCdraWxsc190b3QnLCAna3ByJywgJ2hzX3BlcmNlbnQnLCAnYmxpbmRlZF9wZXJjZW50JywgJ2ZpcnN0X2tpbGxfcGVyY2VudCcsDQonbm9uX3RyYWRlZF9wZXJjZW50JywgJ2Fzc2lzdF9wZXJjZW50JywgJ3N0cmFmaW5nJywgJ2FkcicsICAnYXZnX2ZsYXNoX2R1cmF0aW9uJywgJ2dyZW5hZGVzX3Blcl9yb3VuZCcpDQoNCnRlYW1fa2lsbHNzdGF0LnBjYSA8LSBwcmNvbXAodGVhbV9raWxsc3N0YXRbLHBjYS52YXJpYWJsZXNdLCBjZW50ZXIgPSBUUlVFLHNjYWxlLiA9IFRSVUUpDQoNCnN1bW1hcnkodGVhbV9raWxsc3N0YXQucGNhKQ0KDQpgYGANCg0KDQpgYGB7cn0NCmxpYnJhcnkoY2xpKQ0KbGlicmFyeShkZXZ0b29scykNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zdGFsbF9naXRodWIoInZxdi9nZ2JpcGxvdCIpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGdnYmlwbG90KQ0KDQpnZ2JpcGxvdCh0ZWFtX2tpbGxzc3RhdC5wY2EpDQpgYGANCg0KV2Ugbm93IGNvbG9yIHBvaW50cyBzbyB0aGF0IHRlYW1zIHRoYXQgaGF2ZSB3b24gYXBwZWFyIGluIGEgY2VydGFpbiBjb2xvciwgYW5kIHRlYW1zIHRoYXQgZGlkbid0IGFwcGVhciBpbiBhbm90aGVyIGNvbG9yLiBXZSBhbHNvIG1ha2UgYXJyb3cgc3RhbmQgb3V0IGEgYml0IG1vcmUsIGFuZCBhZGQgdGhlIGNvcnJlbGF0aW9uIGNpcmNsZS4NCg0KYGBge3IgZmlnLmhlaWdodCA9IDh9DQoNCnAgPC0gZ2diaXBsb3QodGVhbV9raWxsc3N0YXQucGNhICwgb2JzLnNjYWxlID0gMSwgdmFyLnNjYWxlID0xLGNpcmNsZT1UUlVFLCBncm91cHM9dGVhbV9raWxsc3N0YXQkd2luLHZhcm5hbWUuYWRqdXN0ID0gMS43LCB2YXJuYW1lLnNpemUgPSAyLjMsICBhbHBoYSA9IDAuNykNCg0KcCA8LSBwICsgeGxpbSgtNC41LCAzKSArIA0KICB5bGltKC0zLjEsIDUpICsgDQogIGdndGl0bGUoIlBDQSBvZiB0ZWFtIHN0YXRpc3RpY3MgaW4gbWF0Y2hlcyIpICArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsgDQogIGxhYnMoY29sb3VyID0gIk1hdGNoIHJlc3VsdCIpIA0KDQpwDQpgYGANCg0K